#include "vip.h"
#include <stdlib.h>
#include <string.h>

Vip vip[VIP_MAX];
size_t g_vip_cnt;

int query_phone(const char* phone)
{
	for(int i=0; i<g_vip_cnt; i++)
	{
		if(0 == strcmp(vip[i].phone,phone))
			return i;
	}
	return -1;
}

void add_vip(void)
{
	if(g_vip_cnt >= VIP_MAX)
	{
		print_sec("VIP数量已满，无法添加！",0.75);
		return;
	}
	
	// 输入手机号
	printf("请输入手机号：");
	char phone[13];
	get_str(phone,sizeof(phone));
	if(11 != strspn(phone,STR_DIGIT))
	{
		print_sec("手机号格式错误！添加失败！",0.75);
		return;
	}

	// 检查手机号是否已存在
	if(-1 < query_phone(phone))
	{
		print_sec("该号码已存在，添加失败！",1);
		return;
	}
	strcpy(vip[g_vip_cnt].phone,phone);
	// 输入密码
	printf("请输入密码(最大长度10位)：");
	char password[12];
	get_str(password,sizeof(password));
	if(0 == strlen(password) || strlen(password) != strspn(password,STR_DIGIT_ALPHABET))
	{
		print_sec("错误！密码为空或格式不正确！",0.75);
		return;
	}

	// 确认密码
	char password_again[12];
	printf("请再次输入密码：");
	get_str(password_again,sizeof(password_again));
	if(0 != strcmp(password,password_again))
	{
		print_sec("密码不一致！添加失败！",0.75);
		return;
	}

	// 输入姓名
	printf("请输入姓名：");
	get_str(vip[g_vip_cnt].name,sizeof(vip[g_vip_cnt].name));
	if(0 == strlen(vip[g_vip_cnt].name))
	{
		print_sec("错误！姓名为空！",1);
		return;
	}

	strcpy(vip[g_vip_cnt].password,password);
	vip[g_vip_cnt].points = 0;
	g_vip_cnt++;
	print_sec("添加成功！",0.75);
	return;
}

void delete_vip(void)
{
	if(0 == g_vip_cnt)
	{
		print_sec("当前没有vip！",0.75);
		return;
	}

	char phone[13];
	printf("请输入要删除vip的手机号：");
	get_str(phone,sizeof(phone));
	int index = query_phone(phone);
	if(-1 == index)
	{
		print_sec("该手机号不存在！",0.75);
		return;
	}

	if(yes_or_no())
	{
		vip[index] = vip[g_vip_cnt-1];
		g_vip_cnt--;
		print_sec("删除成功！",0.75);
		return;
	}
	else
	{
		print_sec("删除操作已取消！",0.75);
		return;
	}
}

void update_vip(void)
{
	if(0 == g_vip_cnt)
	{
		print_sec("当前没有vip！",0.75);
		return;
	}

	// 输入手机号
	char phone[13];
	printf("请输入要修改的vip手机号：");
	get_str(phone,sizeof(phone));
	int index = query_phone(phone);
	if(-1 == index)
	{
		print_sec("手机号不存在！",0.75);
		return;
	}

	// 输入密码
	char password[15];
	printf("请输入新密码：");
	get_str(password,sizeof(password));
	if(0 == strlen(password))
	{
		print_sec("错误！密码为空！",0.75);
		return;
	}
	
	// 输入姓名
	char name[20];
	printf("请输入姓名：");
	get_str(name,sizeof(name));
	if(0 == strlen(name))
	{
		print_sec("错误！姓名为空！",0.75);
		return;
	}

	// 修改信息
	strcpy(vip[index].password,password);
	strcpy(vip[index].name,name);
	print_sec("信息修改成功！",0.75);
	return;
}

void update_vip_points(void)
{
	if(0 == g_vip_cnt)
	{
		print_sec("当前没有vip！",0.75);
		return;
	}

	// 输入手机号
	char phone[13];
	printf("请输入要修改的vip手机号：");
	get_str(phone,sizeof(phone));
	int index = query_phone(phone);
	if(-1 == index)
	{
		print_sec("手机号不存在！",0.75);
		return;
	}

	// 输入积分
	char points[100];
	printf("请输入积分：");
	get_str(points,sizeof(points));
	size_t len = strlen(points);
	if(len != strspn(points,STR_DIGIT))
	{
		print_sec("积分输入格式错误！",0.75);
		return;
	}
	vip[index].points = str_to_n(points);
	print_sec("修改积分成功！",0.75);
	return;
}

void find_all_vip(void)
{
	printf("姓名\t电话\t\t密码\t积分\n");
	for(int i=0; i<g_vip_cnt; i++)
	{
		printf("%s\t%s\t%s\t%d\n",
				vip[i].name,
				vip[i].phone,
				vip[i].password,
				vip[i].points);
	}
	anykey_continue();
	return;
}

void menu_vip(void)
{
	for(;;)
	{
		system("clear");
		puts("*****VIP信息管理*****");
		puts("1、添加VIP");
		puts("2、删除VIP");
		puts("3、修改VIP");
		puts("4、修改积分");
		puts("5、遍历VIP");
		puts("6、返回");
		switch(get_cmd('1','6'))
		{
			case '1': add_vip(); break;
			case '2': delete_vip(); break;
			case '3': update_vip(); break;
			case '4': update_vip_points(); break;
			case '5': find_all_vip(); break;
			case '6': return;
		}
	}
}

